Technical Q&As
AMT_PE 19 - AMT_PE Freezes (1-Aug-95)
Q Why do AMT/PE 1.2 applications occasionally freeze during screen switching?
A This is caused by the Apple Media Kit calling SetCCursor during a VBL task,
which can move memory. While this didn't cause problems on earlier models (even
on those with the PowerPC 601 chip), it frequently causes problems on PowerPC
604-based systems. This may be because VM is on by default. We do not think it
has anything to do with the hardware.
A replacement cursor.c file has been provided in the Apple Media
Tool/Programming Environment Runtime folder, and we do have a replacement
Runtime Maker:Codes:Program file for Apple Media Tool. If you are currently
developing titles, replacing these files and rebuilding your projects will
remove the bug.
For existing titles, we have an applet (titled AMK Launch'NPlay) that you can
distribute to any of your customers who report this problem. Instruct the
customer to launch AMK Launch'NPlayand navigate to the title (what they would
ordinarily double click on) in the dialog box presented. The title will be
launched and not crash as before. (Spinning cursors will not be drawn,
however.)
globalA5);" powerc="" aspinptr->task.vblcount="10;" aspinptr->index++;="" if="" (aspinptr->index="=" aspinptr->count)="" aspinptr->index="0;" use="" the="" b&w="" cursor="" inside="" locked="" color="" handle="" so="" it="" does="" not="" move="" memory...="" setcursor((cursor*)&((aspinptr->cursors[aspinptr->index])->crsr1data));="" seta5(aspinptr->locala5);="" spinisrunning(key*="" the[result]="keyFromBoolean(gSpinRecord.running);" spinstart(key*="" static="" vblupp="" avblupp="NULL;" acount,="" anindex;="" ahandle;="" (avblupp="=" null)="" acount="keyToInteger(keyCall0(the[SELF]," k_count));="" for="" (anindex="0;" anindex="" <="" acount;="" anindex++)="" k_getat,="" keyfrominteger(anindex="" +="" 1));="" ahandle="keyToHandle(keyGet(the[RESULT]," hlock(ahandle);="" gspinrecord.cursors[anindex]="(CCrsrPtr)*aHandle;" gspinrecord.globala5="GetA5();" gspinrecord.task.qtype="vType;" gspinrecord.task.vbladdr="aVBLUPP;" gspinrecord.task.vblcount="10;" gspinrecord.task.vblphase="0;" gspinrecord.index="0;" gspinrecord.count="aCount;" (vinstall((qelemptr)&(gspinrecord.task))="=" noerr)="" gspinrecord.running="1;" spinstop(key*="" (vremove((qelemptr)&(gspinrecord.task))="=" hunlock(ahandle);="" cursorsshow(key="" *the)="" (keyistrue(the[argument(1)]))="" showcursor();="" else="" hidecursor();="" <="" pre="">
globalA5);" powerc="" aspinptr->task.vblcount="10;" aspinptr->index++;="" if="" (aspinptr->index="=" aspinptr->count)="" aspinptr->index="0;" use="" the="" b&w="" cursor="" inside="" locked="" color="" handle="" so="" it="" does="" not="" move="" memory...="" setcursor((cursor*)&((aspinptr->cursors[aspinptr->index])->crsr1data));="" seta5(aspinptr->locala5);="" spinisrunning(key*="" the[result]="keyFromBoolean(gSpinRecord.running);" spinstart(key*="" static="" vblupp="" avblupp="NULL;" acount,="" anindex;="" ahandle;="" (avblupp="=" null)="" acount="keyToInteger(keyCall0(the[SELF]," k_count));="" for="" (anindex="0;" anindex="" <="" acount;="" anindex++)="" k_getat,="" keyfrominteger(anindex="" +="" 1));="" ahandle="keyToHandle(keyGet(the[RESULT]," hlock(ahandle);="" gspinrecord.cursors[anindex]="(CCrsrPtr)*aHandle;" gspinrecord.globala5="GetA5();" gspinrecord.task.qtype="vType;" gspinrecord.task.vbladdr="aVBLUPP;" gspinrecord.task.vblcount="10;" gspinrecord.task.vblphase="0;" gspinrecord.index="0;" gspinrecord.count="aCount;" (vinstall((qelemptr)&(gspinrecord.task))="=" noerr)="" gspinrecord.running="1;" spinstop(key*="" (vremove((qelemptr)&(gspinrecord.task))="=" hunlock(ahandle);="" cursorsshow(key="" *the)="" (keyistrue(the[argument(1)]))="" showcursor();="" else="" hidecursor();="" <="" pre="">
Technical Q&As
Previous Question | Contents | Next Question